#pragma once
#include "protocol.hpp"

class Cal
{
public:
    Cal(Request req)
        : _x(req._x), _y(req._y), _oper(req._oper)
    {
    }

    Response cal()
    {
        switch (_oper)
        {
        case '+':
            _result = _x + _y;
            break;
        case '-':
            _result = _x - _y;
            break;
        case '*':
            _result = _x * _y;
            break;
        case '/':
        {
            if (_y == 0)
                _retinfo = "除数为0,结果无意义";
            else
                _result = _x / _y;
        }
        break;
        case '%':
        {
            if (_y == 0)
                _retinfo = "模0,结果未定义";
            else
                _result = _x % _y;
        }
        break;

        default:
            _retinfo = "结果无效,未录入该运算符";
            break;
        }
        return {_result, _retinfo};
    }

    string Answer()
    {
        return "result = " + to_string(_result) + " ret_info = " + _retinfo;
    }

private:
    int _x;
    int _y;
    char _oper;
    int _result;
    string _retinfo = "结果无误";
};
